As other schedulers are doing already: if the idle vcpu
is picked and scheduled, there is no need to reprogram the
scheduler timer to fire and invoke csched2_schedule()
again in future.
Tickling or external events will serve as pokes, when
necessary, but until we can, we should just stay idle.
Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
Reported-by: Tianyang Chen <tiche@seas.upenn.edu>
Suggested-by: George Dunlap <george.dunlap@citrix.com>
Acked-by: George Dunlap <george.dunlap@citrix.com>
struct csched2_runqueue_data *rqd = RQD(ops, cpu);
struct list_head *runq = &rqd->runq;
+ /*
+ * If we're idle, just stay so. Others (or external events)
+ * will poke us when necessary.
+ */
if ( is_idle_vcpu(snext->vcpu) )
- return CSCHED2_MAX_TIMER;
+ return -1;
/* General algorithm:
* 1) Run until snext's credit will be 0